大版本升级检查报告说明

本文介绍RDS MySQL大版本升级检查时的常见报错信息,并提供检测项的内容详情、可能原因以及解决方案。

以下报错信息为常见报错,如遇其他报错信息请提工单咨询。

检测项

常见报错

检查内容

可能原因

解决方案

check_ins_major_version

Current engine version does not support operations.

检查当前实例版本是否符合MySQL大版本升级的前提条件。

该实例版本不是5.6或5.7,并且升级方式不是5.6升级到5.7或5.7升级到8.0。

请参照MySQL大版本升级的前提条件进行操作。详情请参见升级数据库版本

check_ins

Specified instance does not exist or not support.

检查当前实例是否存在。

实例不存在或已被删除。

查看实例是否存在,使用已有的RDS MySQL实例进行检查。

check_ins_status

Current DB instance state does not support this operation.

检查实例状态是否为运行中。

有其他相关操作(如重启中,创建网络连接中等)正在进行,导致实例状态不为运行中。

请等待任务结束,实例状态为运行中后,再发起数据库大版本升级检查。

check_master_ins

Current DB instance type does not support this operation.

检查待升级实例是否为主实例。

待升级的实例为灾备实例或者只读实例。

需要确保当前升级的实例为主实例。

check_ins_locked_state

Current DB instance lock mode does not support this operation.

检查实例是否为锁定状态。

此实例状态为“锁定中”。

请先解锁实例,等待当前状态变为“运行中“,再进行升级检查操作。具体解锁信息,请参见实例状态显示“锁定中”时如何解决?

check_maxscale_kernel

The Maxscale version used by the instance is too low, please upgrade the Maxscale version first.

检查数据库代理中代理小版本是否支持。

实例使用了代理,代理的小版本低于1.13.41。

请先升级代理小版本至符合要求的版本后,再升级数据库版本。详情请参见升级数据库代理内核小版本

check_ins_tde_state

Specified TDEStatus is not configured on the This custins.

检查当前实例是否开启TDE。

待检查实例已开启TDE。

实例开启了TDE功能,则不支持通过控制台直接升级。更多信息,请参见升级数据库版本

check_target_ins_level

Current DB instance level does not support this operation.

校验当前实例规格是否为在售的规格。

当前实例规格已下线。

部分已下线的实例无法进行版本升级,请先进行规格升级。

check_target_read_level

The read-only instance level is not supported in the target instance.

校验当前只读实例规格是否为在售的规格。

只读实例规格已下线。

实例存储为本地盘,请将当前只读实例变更至官方售卖的规格后,再进行检查。

check_upgrade_check_task

The task already exists.

检查当前实例是否存在大版本升级前置校验任务。

当前实例有大版本升级前置校验任务正在进行中。

请等待前置校验任务完成,待实例状态变为运行中后,再进行检查。

check_upgrade_task

The task already exists.

检查当前实例是否已存在大版本升级任务。

当前实例有大版本升级任务正在进行。

请等待大版本升级任务完成,待实例状态变为运行中后,再进行检查。

check_storage _type

Cloud ssd does not support this operation, please upgrade to essd.

检查当前实例存储是否为SSD云盘。

当前实例存储为SSD云盘。

请先升级存储类型为ESSD云盘。详情请参见升级SSD云盘至ESSD云盘

check_source_category

Specified source category is invalid.

检查当前实例类型。

当前实例类型不属于基础系列或者高可用系列。

暂不支持非高可用系列或基础系列的实例进行升级检查。

check_ins_biz_type

Specified biz type is not valid.

检查当前实例是否属于公共云。

当前实例不属于公共云。

目前只支持针对公共云实例进行升级检查。

check_ins_tables_number

Upgrade not allowed due to excessive number of tables: more than 1000,000.

Upgrade not allowed due to excessive number of tables: more than 1000,000.

检查实例的数据表数量。

  • 本地盘实例的数据表数量超过100W,不支持升级。

  • 云盘实例的数据表数量超过100W,不支持升级。

请在升级检查前清理冗余的数据表。

check_ins_db_engine

There are engines present such as MyISAM, Memory, TokuDB, Sphinx, or RocksDB.

检查实例数据库中是否有MyISAM、Memory,TokuDB,Sphinx或RocksDB引擎

数据库实例中使用了MyISAM、Memory、TokuDB、Sphinx或RocksDB引擎,不支持升级。

请先将数据库引擎转换为InnoDB引擎。如果您的数据库已是InnoDB引擎,但部分表仍是其他引擎,请使用ALTER TABLE <表名> engine=InnoDB;命令,将表转换为InnoDB引擎后,再进行升级。

check_ins_fts

The current instance has an FTS index, and the minor version is less than 20221130.

检查实例数据库中是否具有Fts索引,且小版本是否低于20221130。

  • 由于MySQL历史原因,全文索引可能建立在系统表空间上。大版本升级时,这些索引可能导致表空间损坏。为避免数据损坏,应在升级前处理这些索引。

  • RDS MySQL 5.6 20221130对该问题进行了修复,全文索引将建立在单独的表空间之上。

RDS MySQL的5.6版本中,全文索引会创建在系统表空间。因此,RDS MySQL 5.6升级至RDS MySQL 5.7的版本时,需提前清理系统表空间中的全文索引(方法如下),并确保当前RDS MySQL 5.6的小版本为20221130或之后的版本。如您的版本较低,请先升级至最新的RDS MySQL 5.6版本。详情请参见升级数据库版本

  1. 根据提示中的表名,删除建立在系统表空间的全文索引。

    ALTER TABLE $table_name DROP INDEX $fts_name;
  2. 重新创建全文索引。

    ALTER TABLE $table_name ADD FULLTEXT INDEX $fts_name;
  3. 建立完索引后,可以使用如下SQL对当前实例的全文索引进行检查。SQL会返回建立在系统表空间的全文索引,如查询结果为空,则RDS MySQL 5.6升级至RDS MySQL 5.7的过程中不会因为索引问题而导致失败。

    SELECT NAME FROM information_schema.INNODB_SYS_TABLES WHERE TABLE_ID IN ( SELECT CONV(SUBSTRING_INDEX(SUBSTRING_INDEX(NAME, '_', -4),'_', 1),16,10) FROM INNODB_SYS_TABLES WHERE NAME LIKE '%fts_00000000%' AND SPACE = 0);

check_read_ins_number

The number of read-only instances cannot be greater than 8.

检查本地盘的只读实例数量不能大于8。

当前本地盘实例中只读实例数量大于8。

释放掉多余的只读实例,待升级完成后再创建。

check_slave_state

The slave status is unhealthy or has delays.

检查备节点状态以及时延信息。

备节点状态可能非正常或存在延迟。

可以通过控制台监控与报警功能查看节点复制线程状态(单位:秒)和节点复制延迟(单位:秒)的监控指标,待备节点状态恢复正常后进行检查。

check_account

The instance has an aliyun_root account.

检查账户。

RDS MySQL 5.6中存在用户手动创建的aliyun_root账户。

RDS MySQL 5.7以上版本添加aliyun_root为默认账户,如果用户在5.6版本手动创建了aliyun_root账户后,升级到5.7时会报同名错误,需提前删除或修改aliyun_root账户,再进行升级检查。更多信息,请参见系统账号说明

check_sys_schema

The instance already has a sys database.

检查实例中是否存在sys库。

RDS MySQL 5.7中,默认是存在sys库的,如果RDS MySQL 5.6存在sys库,这将导致5.6升级到5.7的过程失败。

如果存在sys库,则需要用户将sys库做重命名(由于MySQL不支持RENAME DATABASE,因此需要手动逐个执行ALTER TABLE RENAME)。

SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='sys';

check_table_discard

There are tables that have been discarded.

检查实例中是否存在discarded的表(即做过ALTER TABLE discard TABLESPACE 操作).

实例中存在discarded的表。

查询并删除discarded的表。

SELECT space,name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FS_BLOCK_SIZE=0 AND FILE_SIZE=0 AND name NOT LIKE '%#sql%';

check_table_foreign_key

The partitioned table contains foreign keys.

检查实例中分区表是否包含外键。

有包含外键或者被其他表外键引用的分区表。

需要用户解决表中外键和分区表的冲突。

  1. 查询包含外键的分区表。

    SELECT DISTINCT a.TABLE_SCHEMA, a.TABLE_NAME
    FROM information_schema.TABLE_CONSTRAINTS a, information_schema.PARTITIONS b
    WHERE a.CONSTRAINT_TYPE='FOREIGN KEY'
    AND a.TABLE_SCHEMA = b.TABLE_SCHEMA
    AND a.TABLE_NAME = b.TABLE_NAME
    AND (b.PARTITION_NAME IS NOT NULL OR b.SUBPARTITION_NAME IS NOT NULL);
  2. 查询被其他表外键引用的分区表。

    SELECT DISTINCT a.TABLE_SCHEMA, a.TABLE_NAME, a.REFERENCED_TABLE_SCHEMA, a.REFERENCED_TABLE_NAME
    FROM information_schema.KEY_COLUMN_USAGE a, information_schema.PARTITIONS b
    WHERE a.REFERENCED_TABLE_SCHEMA = b.TABLE_SCHEMA
    AND a.REFERENCED_TABLE_NAME = b.TABLE_NAME
    AND (b.PARTITION_NAME IS NOT NULL OR b.SUBPARTITION_NAME IS NOT NULL);

check_column_length

The number of views with column length greater than or equal to 64 is greater than 0.

检查实例中列长度大于或等于64的view数量。

不支持列长度大于或等于64的view数量大于0。

查询后删除多余view或修改对应列长度。

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS) AND CHAR_LENGTH(COLUMN_NAME) >= 64;

check_foreign_key_constraint

The number of tables with foreign key constraint length greater than 64 is greater than 0.

检查实例中外键约束长度大于64的表数量。

外键约束长度大于64的表数量大于0。

查询并删除相关表或者修改外键约束长度。

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1) FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN WHERE CHAR_LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);

check_dictionary_table

In the MySQL 5.7 system database, there cannot be tables with the same name as those used by the MySQL 8.0 data dictionary.

检查5.7系统数据库中的表与8.0数据字典所使用的表是否存在同名。

5.7数据库中存在与8.0数据字典中相同的表名。

查询5.7系统数据库中与8.0数据字典使用的表是否有同名后,删除或者修改掉相同名称的表。

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(
TABLE_SCHEMA) = 'mysql' and LOWER(TABLE_NAME) IN
('catalogs', 'character_sets', 'check_constraints', 'collations',
'column_statistics', 'column_type_elements', 'columns',
'dd_properties', 'events', 'foreign_key_column_usage', 'foreign_keys',
'index_column_usage', 'index_partitions', 'index_stats',
'indexes', 'parameter_type_elements', 'parameters', 'resource_groups', 'routines',
'schemata', 'st_spatial_reference_systems',
'table_partition_values', 'table_partitions', 'table_stats', 'tables',
'tablespace_files', 'tablespaces', 'triggers', 'view_routine_usage',
'view_table_usage');

check_ins_health

The master node of the instance is not available.

检验实例是否可用(连通性)。

CPU、磁盘等都已被打满。

您可通过控制台监控与报警功能查看各项监控指标是否正常。详情请参见监控与报警

check_read_ins_exists

Instances with read-only do not support this operation.

校验云盘5.7中是否有只读实例。

云盘升级操作,暂不支持主实例包含只读实例。

释放掉只读实例,升级成功后再创建。

check_table_index_type

MySQL 8.0 does not support creating BTREE indexes on spatial fields.

RDS MySQL 5.7升级8.0过程中,5.7版本的spatial类型是否包含BTREE索引。

RDS MySQL 8.0不支持spatial类型创建BTREE索引。

需要删掉或者修改不支持的索引,操作如下:

SELECT DISTINCT s.* FROM INFORMATION_SCHEMA.STATISTICS s
INNER JOIN INFORMATION_SCHEMA.COLUMNS c
ON s.TABLE_SCHEMA = c.TABLE_SCHEMA
AND s.TABLE_NAME = c.TABLE_NAME
AND s.COLUMN_NAME = c.COLUMN_NAME
WHERE s.TABLE_SCHEMA NOT IN ('mysql', 'sys')
AND c.DATA_TYPE IN ('GEOMETRY', 'POINT', 'LINESTRING', 'POLYGON', 'MULTIPOINT', 
'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION')
AND s.INDEX_TYPE = 'BTREE';